home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / sys_util / taskv1 / tasklist.bas < prev    next >
BASIC Source File  |  1994-09-24  |  10KB  |  233 lines

  1.  
  2. '====================================================================================
  3. 'TaskList.Bas - Copyright ⌐1994 michiel de bruijn, Rotterdam, The Netherlands
  4. ' Released for public use 16/08/1994. See TASKLIST.WRI for licensing details
  5. '====================================================================================
  6.  
  7. DefInt A-Z
  8.  
  9. 'TOOLHELP TaskEntry type declaration
  10. Type TASKENTRY
  11.     dwSize As Long              'Size of the TASKENTRY structure, in bytes
  12.     hTask As Integer            'Task handle for the stack
  13.     hTaskParent As Integer      'Parent of the task
  14.     hInstance As Integer        'Instance handle of the task
  15.     hModule As Integer          'Module containg the currently executing function
  16.     wSS As Integer              'Value in the SS register
  17.     wSP As Integer              'Value in the SP register
  18.     wStackTop As Integer        'Top of the stack (lowest address on stack)
  19.     wStackMinimum As Integer    'Lowest segment number of stack during execution of the task
  20.     wStackBottom As Integer     'Bottom of the stack (highest address on stack)
  21.     wcEvents As Integer         'Number of pending events
  22.     hQueue As Integer           'Task Queue
  23.     szModule As String * 10     'Module name (length as per Windows 3.1 toolhelp.h)
  24.     wPSPOffset As Integer       'Offset from the PSP to the beginning of the code segment
  25.     hNext As Integer            'Next entry in task list (Windows internal use only)
  26. End Type
  27.  
  28. 'TOOLHELP ModuleEntry type declaration
  29. Type MODULEENTRY
  30.     dwSize As Long              'Size of the MODULEENTRY structure, in bytes
  31.     szModule As String * 10     'Module name
  32.     hModule As Integer          'Module handle
  33.     wcUsage As Integer          'Reference count of the module
  34.     szExePath As String * 256   'Fully-qualified executable path for the module
  35.     wNext As Integer            'Next entry in module list (Windows internal use only)
  36. End Type
  37.  
  38. 'TOOLHELP ClassEntry type declaration
  39. Type CLASSENTRY
  40.     dwSize As Long              'Size of the CLASSENTRY structure, in bytes
  41.     hInst As Integer            'Identifies the instance handle of the task (module!) that owns the class
  42.     szClassName As String * 256 'Class name
  43.     wNext As Integer            'Next entry in class list (Windows internal use only)
  44. End Type
  45.  
  46. 'Windows API window class type declaration
  47. Type WNDCLASS
  48.     Style As Integer            'Class style
  49.     WndProc As Long             'Pointer to the window procedure
  50.     cbClsExtra As Integer       'Number of extra bytes after the window-class structure
  51.     cbWndExtra As Integer       'Number of extra bytes after the window instance
  52.     hInstance As Integer        'Instance that the window procedure of this class is within
  53.     hIcon As Integer            'Handle to the class icon
  54.     hCursor As Integer          'Handle to the class cursor
  55.     hbrBackGround As Integer    'Handle to the class background brush
  56.     lpszMenuName As Long        'Pointer to the resource name of the class menu (not used by GetClassInfo)
  57.     lpszClassName As Long       'Pointer to the window class name or an atom that identifies such string (not used by GetClassInfo)
  58. End Type
  59.     
  60. 'Windows RECTangle type declaration
  61. Type RECT
  62.   left As Integer
  63.   top As Integer
  64.   right As Integer
  65.   bottom As Integer
  66. End Type
  67.  
  68. 'TOOLHELP function declarations
  69. Declare Function TaskFirst Lib "toolhelp.dll" (te As TASKENTRY) As Integer
  70. Declare Function TaskNext Lib "toolhelp.dll" (te As TASKENTRY) As Integer
  71. Declare Function ModuleFirst Lib "toolhelp.dll" (mo As MODULEENTRY) As Integer
  72. Declare Function ModuleNext Lib "toolhelp.dll" (mo As MODULEENTRY) As Integer
  73. Declare Function ModuleFindName Lib "toolhelp.dll" (mo As MODULEENTRY, ByVal lpszName As String) As Integer
  74. Declare Sub TerminateApp Lib "toolhelp.dll" (ByVal hTask As Integer, ByVal wFlags As Integer)
  75. Declare Function ClassFirst Lib "toolhelp.dll" (ce As CLASSENTRY) As Integer
  76. Declare Function ClassNext Lib "toolhelp.dll" (ce As CLASSENTRY) As Integer
  77.  
  78. 'CTL3D function declarations (use Lib "CTL3DV2" if you've got that DLL)
  79. Declare Function GetModuleHandle Lib "Kernel" (ByVal lpModuleName As String) As Integer
  80. Declare Function Ctl3dRegister Lib "CTL3D.DLL" (ByVal hInstance As Integer) As Integer
  81. Declare Function Ctl3dAutoSubClass Lib "CTL3D.DLL" (ByVal hInstance As Integer) As Integer
  82. Declare Function Ctl3dUnregister Lib "CTL3D.DLL" (ByVal hInstance As Integer) As Integer
  83.  
  84. 'Windows API function declarations
  85. Declare Function SetWindowPos% Lib "User" (ByVal win%, ByVal awin%, ByVal xp%, ByVal yp%, ByVal xs%, ByVal ys%, ByVal flags%)
  86. Declare Function GetSysColor Lib "User" (ByVal nIndex As Integer) As Long
  87. Declare Function GetSystemMetrics Lib "User" (ByVal nIndex As Integer) As Integer
  88.  
  89. Declare Function AppendMenu Lib "User" (ByVal hMenu As Integer, ByVal wFlags As Integer, ByVal wIDNewItem As Integer, ByVal lpNewItem As Any) As Integer
  90. Declare Function CreatePopupMenu Lib "User" () As Integer
  91. Declare Function ModifyMenu Lib "User" (ByVal hMenu%, ByVal nPosition%, ByVal wFlags%, ByVal wIDNewItem%, ByVal lpNewItem As Any) As Integer
  92. Declare Function SendMessage Lib "User" (ByVal hWnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Long
  93. Declare Function TrackPopupMenu Lib "User" (ByVal hMenu As Integer, ByVal wFlags As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal nReserved As Integer, ByVal hWnd As Integer, lpReserved As Any) As Integer
  94.  
  95. Declare Function GetWindow Lib "User" (ByVal hWnd As Integer, ByVal wCmd As Integer) As Integer
  96. Declare Function GetWindowTask Lib "User" (ByVal hWnd As Integer) As Integer
  97. Declare Function GetWindowWord% Lib "user" (ByVal hWnd As Integer, ByVal nOffset As Integer)
  98. Declare Function GetWindowText Lib "User" (ByVal hWnd As Integer, ByVal lpString As String, ByVal aint As Integer) As Integer
  99. Declare Function IsWindowVisible Lib "User" (ByVal hWnd As Integer) As Integer
  100. Declare Function IsIconic Lib "User" (ByVal hWnd As Integer) As Integer
  101. Declare Function IsZoomed Lib "User" (ByVal hWnd As Integer) As Integer
  102. Declare Function ArrangeIconicWindows Lib "User" (ByVal hWnd As Integer) As Integer
  103. Declare Function GetDeskTopWindow Lib "User" () As Integer
  104. Declare Function GetClassInfo Lib "User" (ByVal hInst As Integer, ByVal lpszClassName As String, lpwc As WNDCLASS) As Integer
  105.  
  106. Declare Function DrawIcon Lib "User" (ByVal hDC As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal hIcon As Integer) As Integer
  107. Declare Function DestroyIcon% Lib "User" (ByVal hIcon As Integer)
  108. Declare Function ExtractIcon% Lib "Shell.dll" (ByVal hInst As Integer, ByVal lpszFileName As String, ByVal nIconIndex As Integer)
  109.  
  110. Declare Function PostAppMessage Lib "User" (ByVal hTask As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Integer
  111. Declare Function PostMessage Lib "User" (ByVal hWnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Integer
  112.  
  113. Declare Function GetKeyState Lib "User" (ByVal nVirtKey As Integer) As Integer
  114.  
  115. Declare Sub FreeModule Lib "Kernel" (ByVal hModule As Integer)
  116.  
  117. 'Undocumented Windows API functions -- use at your own risk
  118. Declare Sub SwitchToThisWindow Lib "User" Alias "#172" (ByVal hWnd As Integer, ByVal bRestore As Integer)
  119. Declare Sub CascadeChildWindows Lib "User" Alias "#198" (ByVal hParent As Integer, ByVal wAction As Integer)
  120. Declare Sub TileChildWindows Lib "User" Alias "#199" (ByVal hParent As Integer, ByVal wAction As Integer)
  121. Declare Function IsWinOldApTask Lib "Kernel" Alias "#158" (ByVal hTask As Integer) As Integer
  122.  
  123. 'Window messages
  124. Global Const WM_COMMAND = &H111
  125. Global Const WM_NCACTIVATE = &H86
  126. Global Const WM_NCHITTEST = &H84
  127. Global Const WM_NCLBUTTONDBLCLK = &HA3
  128. Global Const WM_NCLBUTTONDOWN = &HA1
  129. Global Const WM_SYSCOMMAND = &H112
  130. Global Const WM_QUIT = &H12
  131. 'Undocumented/unreliable Windows messages (test only)
  132. Global Const WM_OTHERWINDOWCREATED = &H42
  133. Global Const WM_OTHERWINDOWDESTROYED = &H43
  134.  
  135. 'wParam values for WM_SYSCOMMAND
  136. Global Const SC_MOVE = &HF010
  137. Global Const SC_CLOSE = &HF060
  138.  
  139. 'Menu function values
  140. Global Const MF_ENABLED = 0
  141. Global Const MF_STRING = 0
  142. Global Const MF_CHECKED = &H8
  143. Global Const MF_BYPOSITION = &H400
  144. Global Const MF_SEPARATOR = &H800
  145.  
  146. 'Menu ID's
  147. Global Const IDM_SYSMOVE = 101
  148. Global Const IDM_SYSCLOSE = 102
  149. Global Const IDM_FLOAT = 103
  150.  
  151. 'Windows system color constants
  152. Global Const COLOR_ACTIVECAPTION = 2
  153. Global Const COLOR_INACTIVECAPTION = 3
  154.  
  155. 'System metrics constant
  156. Global Const SM_CYMENU = 15
  157.  
  158. 'Message Blaster VBX constants
  159. Global Const PREPROCESS = -1
  160. Global Const EATMESSAGE = 0
  161. Global Const POSTPROCESS = 1
  162.  
  163. 'WM_NCHITTEST return values
  164. Global Const HTCLIENT = 1
  165. Global Const HTCAPTION = 2
  166. Global Const HTSYSMENU = 3
  167.  
  168. 'GetWindow constants
  169. Global Const GW_HWNDFIRST = 0
  170. Global Const GW_HWNDNEXT = 2
  171. Global Const GW_OWNER = 4
  172.  
  173. 'GetWindowWord constants
  174. Global Const GWW_HINSTANCE = -6
  175. Global Const GWW_HWNDPARENT = -8
  176.  
  177. 'MDI Tile constants
  178. Global Const MDITILE_HORIZONTAL = 0
  179. Global Const MDITILE_VERTICAL = 1
  180.  
  181. 'Virtual key code
  182. Global Const VK_SHIFT = &H10
  183.  
  184. 'Global variables ... <shiver>
  185. Global hInst%
  186.  
  187. Static Sub DoEnd ()
  188.  
  189. 'DoEnd: gracefully terminate our app
  190.  
  191. If InStr(Command$, "NO3D") = 0 Then
  192.     ' Get our instance handle again
  193.     hInstance% = GetWindowWord(forms(0).hWnd, GWW_HINSTANCE)
  194.     ' And unregister from the CTL3D library
  195.     res% = Ctl3dUnregister(hInstance%)
  196. End If
  197.  
  198. End
  199.  
  200. End Sub
  201.  
  202. Static Function Hex4$ (value%)
  203.  
  204. 'Hex4$: convert integer into 4-digit hex number
  205. Hex4$ = Right$("0000" & Hex$(value%), 4)
  206.  
  207. End Function
  208.  
  209. Sub main ()
  210.  
  211. If InStr(Command$, "NO3D") = 0 Then
  212.     ' Get the instance handle to our application by calling GetWindowWord
  213.     ' with the GWW_HINSTANCE parameter (get instance handle of the module that owns this window)
  214.     hInstance% = GetWindowWord(TaskList.hWnd, GWW_HINSTANCE)
  215.     ' And register the app with the CTL3D library
  216.     res% = Ctl3dRegister(hInstance%)
  217.     res% = Ctl3dAutoSubClass(hInstance%)
  218. End If
  219.  
  220. 'Start the show!
  221. TaskList.Show 1
  222.  
  223. End Sub
  224.  
  225. Static Function ZTrim$ (lin$)
  226.  
  227. 'ZTrim: Like Trim$, but works (only) for NULL-terminated
  228. ' (C-style) strings.
  229. ZTrim$ = Trim$(Left$(lin$, InStr(lin$, Chr$(0)) - 1))
  230.  
  231. End Function
  232.  
  233.